#ifndef _MY_HOT_
#define _MY_HOT_
#include"data.hpp"

extern cloud::DataManager* _data;
namespace cloud{
class HotManager
{
private:
string _back_dir;
string _pack_dir;
string _pack_suffix;
int _hot_time;
private:
//非热点文件返回true。热点文件返回false
bool HotJudge(const stri ng& filename)
{
    FileUtil fu(filename);
    time_t last_atime=fu.LastATime();
    time_t cur_time=time(nullptr);
    if(cur_time-last_atime>_hot_time)
    return true;
    else
    return false;
}
public:
    HotManager()
    {
        Config* config=Config::GetInstance();
        _back_dir=config->GetBackDir();
        _pack_dir=config->GetPackDir();
        _pack_suffix=config->GetPackFileSuffix();
        _hot_time = config->GetHotTime();
    }
    bool RunModule()
    {
        while (1)
        {
            // 1.遍历备份目录，获取所有文件名
            FileUtil fu(_back_dir);
            vector<string> arry;
            fu.ScanDirectory(&arry);
            // 2.遍历判断文件是否是非热点文件
            for (auto &a : arry)
            {
                if (HotJudge(a) == false)
                    continue; // 热点文件不需要特殊处理
                // 3.获取文件的备份信息
                BackupInfo bi;
                if (_data->GetOneByRealPath(a, &bi) == false)
                {
                    // 现在有一个文件存在，但是没有备份信息
                    bi.NewBackupInfo(a); // 设置一个新的备份信息出来
                }
                // 3. 对非热点文件进行压缩处理
                FileUtil tmp(a);
                tmp.Compress(bi.pack_path);
                // 4. 删除源文件，修改备份信息
                tmp.Remove();
                bi.pack_flag = true; // 标识此文件已被压缩
                _data->Update(bi);
            }
        }
        usleep(1000); //避免空目录循环遍历，消耗cpu资源过高
        return true;
    }
};
};

#endif